﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using Spring.Context;
using SistemaDeBastanteodePoderes.Negocio;
using Spring.Context.Support;
using SistemaDeBastanteodePoderes.Persistencia;
using SistemaDeBastanteodePoderes.Dominio;

namespace SistemaDeBastanteodePoderes.Pruebas.Negocio
{
    [TestFixture]
    public class Test_H3_SupervisorService
    {
        IApplicationContext Spring = null;
        ISupervisorService Service = null;
        Poder poderRegistrado = null;
        TipoServicio tipoSerCreado = null;

        [TestFixtureSetUp]
        public void InicioPruebas()
        {
            Spring = new XmlApplicationContext(
                "assembly://SistemaDeBastanteodePoderes/SistemaDeBastanteodePoderes/capaPersistencia.xml",
                "assembly://SistemaDeBastanteodePoderes/SistemaDeBastanteodePoderes/capaNegocio.xml"
                );
            Service = (ISupervisorService)Spring.GetObject("supervisorService");
            tipoSerCreado = ((ITipoServicioDAO)Spring.GetObject("tipoSerDAO_NH")).Crear(new TipoServicio() {  Servicio = "ACTIVO" });

        }

        [Test]
        public void Test1_AgregarPoder_DatosInsuficientes()
        {
            Assert.Catch<DatosInsuficientesException>(delegate
            {
                poderRegistrado = Service.AgregarPoder("CCHEQ", null, tipoSerCreado.Codigo);
            });
        }

        [Test]
        public void Test2_AgregarPoder_OK()
        {

            Assert.DoesNotThrow(delegate
            {
                poderRegistrado = Service.AgregarPoder("CCHEQ", "COBRO DE CHEQUES", tipoSerCreado.Codigo);
            });

            Assert.IsNotNull(poderRegistrado);
            Assert.Greater(poderRegistrado.Codigo, 0);
            Assert.AreEqual(poderRegistrado.CodCorto, "CCHEQ");
            Assert.AreEqual(poderRegistrado.NomPoder, "COBRO DE CHEQUES");
            Assert.AreEqual(poderRegistrado.Servicio.Codigo, tipoSerCreado.Codigo);
        }

        [Test]
        public void Test3_AgregarPoder_CodigoCortoRepetido()
        {
            Poder poderCodCortoRepetido = null;

            Assert.Catch<PoderRepetidoException>(delegate
            {
                poderCodCortoRepetido = Service.AgregarPoder("CCHEQ", "COBRO DE CHEQUES", tipoSerCreado.Codigo);
            });

            Assert.IsNull(poderCodCortoRepetido);

        }

        [TestFixtureTearDown]
        public void FinalizarPruebas()
        {
            ((IPoderDAO)Spring.GetObject("poderDAO_NH")).Eliminar(poderRegistrado);
            ((ITipoServicioDAO)Spring.GetObject("tipoSerDAO_NH")).Eliminar(tipoSerCreado);
            Spring.Dispose();
            Spring = null;
        }

    }
}